package com.kevin.demo.util;

import java.lang.reflect.Method;
import java.util.Map;

/**
 * 反射工具类
 * @author kevin
 *
 */
public class ReflectUtil {

	/**
	 * 根据反射填充对应的属性值
	 */
	public static Object fillValues(String className, Map<String, Object> data) throws Exception {
		Class classType = Class.forName(className);
		return fillValues(classType, data);
	}

	/**
	 * 根据反射填充对应的属性值
	 */
	public static Object fillValues(Class classType, Map<String, Object> data) throws Exception {
		//获取类的对象
		Object obj = classType.newInstance();
		// 循环调用set方法
		/**
		 * {
		 * 	"name":"kevin",
		 * 	"city":"sh"
		 * }
		 */
		for (String key : data.keySet()) {
			Object value = data.get(key);
			// 获取set方法
			Method setMethod = classType.getMethod(toSetMethodName(key), value.getClass());
			setMethod.invoke(obj, value);
		}
		return obj;
	}

	/**
	 * 获取set方法名，字段首字母大写，前面加set
	 */
	private static String toSetMethodName(String key) {
		StringBuffer sb = new StringBuffer();
		sb.append("set");
		String firstChar = key.substring(0, 1);
		sb.append(firstChar.toUpperCase());
		sb.append(key.substring(1, key.length()));
		System.out.println(sb.toString());
		return sb.toString();
	}
}
